package everydayone.findcontinuessequence;

import java.util.ArrayList;
import java.util.List;

/**
 * @Date 2020/03/06
 * @author 王光浩 
 * @Thinking 使用滑动窗口方法。
 * @Analysis 时间复杂度O（n/2），空间复杂度O（n^2）
 */
public class MyMethodOne {
    public int[][] findContinuousSequence(int target) {
    	ArrayList<List<Integer>> temRes=new ArrayList<>();  //暂时保存结果
    	int count=3;    //统计窗口中的元素值总和
    	int left=1;  //左边框值
    	int right=2; //右边框值
    	int len=2;   //窗口的大小
    	//进行移动
    	while(len>=2) {
    		if(count<target) { //需要注意的是：当right=bound时，不会出现count<target
    			count+=right++;  //向右扩大窗口
    			len++;
    		}
    		else if(count>target) {
				count-=left++;//向左缩小窗口
    			len--;
    		}
    		else {   //出现目标序列
    			ArrayList<Integer> tem=new ArrayList<Integer>(len);
    			for(int i=len;i<=right;i++) {
    				tem.add(i);
    			}
    			temRes.add(tem);
    			//窗口向右移
    			count+=right++;
    			len++;
    		}
    	}
    	int[][] res=new int[temRes.size()][]; //将结果赋值给数组
    	for(int i=0;i<res.length;i++) {
    		int index=0;
    		res[i]=new int[temRes.get(i).size()];
    		for(int tem:temRes.get(i)) {
    			res[i][index++]=tem;
    		}
    	}
    	return res;
    }
}
